CSS View Transitionã®ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãé¢é£ä»ãã培åºè§£èª¬ããview-transition-classããªã©ãçšããŠãæŽç·Žããããšãã§ã¯ããå®çŸããæ¹æ³ãæ¢ããŸãã
CSS View Transitionã®åäžèŽïŒã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãããã¹ã¿ãŒãã
CSS View Transitionã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ãããç°ãªãç¶æ éã®ã¹ã ãŒãºã§èŠèŠçã«é åçãªãã©ã³ãžã·ã§ã³ãäœæããããã®ã匷åãã€ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸããView Transitionã广çã«äœ¿çšããäžã§éèŠãªåŽé¢ã¯ãã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ããçè§£ããããšã§ããããã«ããããã©ã³ãžã·ã§ã³äžã«ç°ãªãèŠçŽ ã«é©çšãããç¹å®ã®ã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ã§ããŸãããã®èšäºã§ã¯ãã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã®è€éããæãäžããçŽ æŽããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããããã®å®è·µçãªäŸãšã¬ã€ãã³ã¹ãæäŸããŸãã
View Transitionã®åºæ¬ãçè§£ãã
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã«èžã¿èŸŒãåã«ãCSS View Transitionã®åºæ¬ãç°¡åã«ããããããŸããããããã¯ãDOMã®ç¶æ éã®å€æŽãã¢ãã¡ãŒã·ã§ã³åããããã®æšæºåãããã¡ã«ããºã ãæäŸããŸããç¶æ ã®å€æŽãçºçãããšïŒäŸïŒã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ã§ã®ããŒãžéããã²ãŒã·ã§ã³ãã³ã³ããŒãã³ãå ã®ã³ã³ãã³ãæŽæ°ïŒãView Transitionã¯å€æŽååŸã®èŠçŽ ã®ç¶æ ããã£ããã£ããŸãããããã®ãã£ããã£ãããç¶æ ããã¢ãã¡ãŒã·ã§ã³åããããã©ã³ãžã·ã§ã³ãäœæããããã«äœ¿çšãããŸãã
ãã®ã³ã¢ã¡ã«ããºã ã¯document.startViewTransition()颿°ã«ãã£ãŠéå§ããããã®é¢æ°ã¯DOMãæ°ããç¶æ
ã«æŽæ°ããã³ãŒã«ããã¯ãåãåããŸãã
äŸïŒ
document.startViewTransition(() => {
// DOMãæ°ããç¶æ
ã«æŽæ°
updateTheDOM();
});
view-transition-nameã®å
view-transition-name CSSããããã£ã¯ãã©ã®èŠçŽ ãView Transitionã«åå ãã¹ãããèå¥ããããã®åºç€ã§ããåãview-transition-nameãæã€èŠçŽ ã¯ãç°ãªãç¶æ
éã§è«ççã«æ¥ç¶ãããŠãããšèŠãªãããŸãããã©ãŠã¶ã¯ãããã®èŠçŽ ã®ãå€ããç¶æ
ãšãæ°ãããç¶æ
ã衚ãç䌌èŠçŽ ãèªåçã«çæãããããã«ã¢ãã¡ãŒã·ã§ã³ãé©çšã§ããããã«ããŸãã
äŸïŒ
.card {
view-transition-name: card-element;
}
ãã®äŸã§ã¯ã'card'ã¯ã©ã¹ãæã€ãã¹ãŠã®èŠçŽ ã®ç¶æ
ãDOMæŽæ°ã®ååŸã§ãã£ããã£ãããæŽæ°ããŸããã§view-transition-nameãäžè²«ããŠããã°ããã©ã³ãžã·ã§ã³ã«åå ããŸãã
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãïŒview-transition-classã®å°å
¥
äž»ã«view-transition-class CSSããããã£ã«ãã£ãŠå®çŸãããã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã¯ãView Transitionäžã«é©çšãããã¢ãã¡ãŒã·ã§ã³ãã«ã¹ã¿ãã€ãºããããã®éµã§ããããã«ããããã©ã³ãžã·ã§ã³å
ã§ã®åœ¹å²ãã¿ã€ãã«åºã¥ããŠãç°ãªãèŠçŽ ã«ç°ãªãã¢ãã¡ãŒã·ã§ã³ãæå®ã§ããŸãããã©ã³ãžã·ã§ã³ã®åéšåã«ã¢ãã¡ãŒã·ã§ã³ã®ã圹å²ããå²ãåœãŠããããªãã®ã ãšèããŠãã ããã
view-transition-classããããã£ã¯ãä»ã®CSSããããã£ãšåãããã«èŠçŽ ã«å²ãåœãŠãããŸããå€ã¯æååã§ããããã®æååãCSSå
ã§é©åãª::view-transition-*ç䌌èŠçŽ ãéžæããããã«äœ¿çšãããŸãã
æ¬åœã®åã¯ãview-transition-classã::view-transition-groupã::view-transition-image-pairã::view-transition-newãããã³::view-transition-oldç䌌èŠçŽ ãšçµã¿åããããšãã«çºæ®ãããŸãã
ç䌌èŠçŽ ãçè§£ãã
::view-transition-group(view-transition-name): æå®ãããview-transition-nameãæã€èŠçŽ ã®å€ãç¶æ ãšæ°ããç¶æ ã®äž¡æ¹ãå«ãã°ã«ãŒãã衚ããŸããããã¯ãã©ã³ãžã·ã§ã³ã®ãããã¬ãã«ã³ã³ããã§ãã::view-transition-image-pair(view-transition-name): View Transitionã«ç»åãå«ãŸããå Žåã«ãå€ãç»åãšæ°ããç»åã®äž¡æ¹ãã©ããããŸããããã«ãããå€ãç»åãšæ°ããç»åã®éã§åæããã¢ãã¡ãŒã·ã§ã³ãå¯èœã«ãªããŸãã::view-transition-new(view-transition-name): èŠçŽ ã®*æ°ãã*ç¶æ ã衚ããŸãã::view-transition-old(view-transition-name): èŠçŽ ã®*å€ã*ç¶æ ã衚ããŸãã
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã®å®è·µäŸ
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ããå®éã«ã©ã®ããã«æ©èœãããã説æããããã«ãããã€ãã®å®è·µçãªäŸãèŠãŠãããŸãããã
äŸ1ïŒæ°ããã³ã³ãã³ãããã§ãŒãã€ã³ããã
ã¢ã€ãã ã®ãªã¹ãããããæ°ããã¢ã€ãã ã远å ããããšãã«ãã§ãŒãã€ã³ãããããšããŸããview-transition-classãš::view-transition-newã䜿çšããŠãããå®çŸã§ããŸãã
HTML:
<ul id="item-list">
<li class="item" style="view-transition-name: item-1;">Item 1</li>
<li class="item" style="view-transition-name: item-2;">Item 2</li>
</ul>
JavaScriptïŒæ°ããã¢ã€ãã ã远å ããããïŒïŒ
function addNewItem() {
document.startViewTransition(() => {
const newItem = document.createElement('li');
newItem.classList.add('item');
newItem.style.viewTransitionName = `item-${Date.now()}`;
newItem.style.viewTransitionClass = 'new-item'; // ã¯ã©ã¹ãå²ãåœãŠã
newItem.textContent = 'New Item';
document.getElementById('item-list').appendChild(newItem);
});
}
CSS:
::view-transition-new(item-*) {
animation: fade-in 0.5s ease-in-out;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
ãã®äŸã§ã¯ãView Transitionã®åã«æ°ãããªã¹ãã¢ã€ãã ã« 'new-item' ã¯ã©ã¹ãå²ãåœãŠãŠããŸããCSSã¯æ¬¡ã«::view-transition-newç䌌èŠçŽ ïŒview-transition-nameã¹ã¿ã€ã«ããã®item-*åã«äžèŽïŒãã¿ãŒã²ããã«ãããã§ãŒãã€ã³ã¢ãã¡ãŒã·ã§ã³ãé©çšããŸããCSSã»ã¬ã¯ã¿ã§ã¯new-itemã¯ã©ã¹èªäœã䜿çšãããŠ*ããªã*ç¹ã«æ³šæããŠãã ãããview-transition-classããããã£ã®*å€*ã¯ãã©ã®*å®é*ã®èŠçŽ ã«èšå®ããŠããããèæ
®ããå Žåã«ã®ã¿éèŠã§ãã
äŸ2ïŒå€ãã³ã³ãã³ããã¹ã©ã€ãã¢ãŠãããã
åã®äŸãåºã«ãæ°ããã¢ã€ãã ããã§ãŒãã€ã³ããéã«å€ãã¢ã€ãã ãã¹ã©ã€ãã¢ãŠãããããã«ããŠã¿ãŸãããã
JavaScriptïŒåãšåãïŒïŒ
function addNewItem() {
document.startViewTransition(() => {
const newItem = document.createElement('li');
newItem.classList.add('item');
newItem.style.viewTransitionName = `item-${Date.now()}`;
newItem.style.viewTransitionClass = 'new-item'; // ã¯ã©ã¹ãå²ãåœãŠã
newItem.textContent = 'New Item';
document.getElementById('item-list').appendChild(newItem);
});
}
CSS:
::view-transition-new(item-*) {
animation: fade-in 0.5s ease-in-out;
}
::view-transition-old(item-*) {
animation: slide-out 0.5s ease-in-out;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slide-out {
from { transform: translateX(0); opacity: 1; }
to { transform: translateX(-100%); opacity: 0; }
}
ããã§ã¯ã::view-transition-oldç䌌èŠçŽ ã«ã¢ãã¡ãŒã·ã§ã³ã远å ããå€ãã¢ã€ãã ããã§ãŒãããªããå·Šã«ã¹ã©ã€ãã¢ãŠãããããã«ããŸãããç¹°ãè¿ãã«ãªããŸãããview-transition-classã¯è¿œå ãã*æ°ãã*èŠçŽ ã«ã®ã¿é¢é£ããããŒãžã«æ¢ã«ååšããã©ã³ãžã·ã§ã³ã«åå ããŠãã*å€ã*èŠçŽ ã«ã¯åœ±é¿ããŸããã
äŸ3ïŒããè€éãªããã²ãŒã·ã§ã³ãã©ã³ãžã·ã§ã³
ããã²ãŒã·ã§ã³ã¡ãã¥ãŒãæã€ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãèããŠã¿ãŸãããããŠãŒã¶ãŒãã¡ãã¥ãŒé
ç®ãã¯ãªãã¯ãããšãã³ã³ãã³ããšãªã¢ãæ°ããããŒãžã«ã¹ã ãŒãºã«ç§»è¡ããå¿
èŠããããŸããview-transition-classã䜿çšããŠããããŒãšã³ã³ãã³ããšãªã¢ãåºå¥ããããããã«ç°ãªãã¢ãã¡ãŒã·ã§ã³ãé©çšã§ããŸãã
HTMLïŒç°¡æçïŒïŒ
<header style="view-transition-name: header; view-transition-class: header-transition;">
<h1>My Website</h1>
</header>
<main style="view-transition-name: content; view-transition-class: content-transition;">
<p>Initial Content</p>
</main>
JavaScriptïŒç°¡æçïŒïŒ
function navigateTo(pageContent) {
document.startViewTransition(() => {
document.querySelector('main').innerHTML = pageContent;
});
}
CSS:
::view-transition-old(header) {
animation: fade-out 0.3s ease-in-out;
}
::view-transition-new(header) {
animation: fade-in 0.3s ease-in-out;
}
::view-transition-old(content) {
animation: slide-out-left 0.5s ease-in-out;
}
::view-transition-new(content) {
animation: slide-in-right 0.5s ease-in-out;
}
@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slide-out-left {
from { transform: translateX(0); }
to { transform: translateX(-100%); }
}
@keyframes slide-in-right {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
ãã®ã·ããªãªã§ã¯ãããããŒã¯ãã§ãŒãã€ã³ã»ãã§ãŒãã¢ãŠãããã³ã³ãã³ãã¯å³ããã¹ã©ã€ãã€ã³ãå·Šãžã¹ã©ã€ãã¢ãŠãããããšã§ãåçã§é
åçãªããã²ãŒã·ã§ã³äœéšãçã¿åºããŸããããã¯header-transitionãšcontent-transitionã¯ã©ã¹ãé©çšããããããŒãšã³ã³ãã³ããšãªã¢ãå¥ã
ã«ç°ãªãã¢ãã¡ãŒã·ã§ã³ã§ã¿ãŒã²ããã«ããããšã§å®çŸããŸããã
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
ã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã广çã«å©çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- ãã©ã³ãžã·ã§ã³ãèšç»ããïŒãã©ã³ãžã·ã§ã³ãå®è£ ããåã«ãç®çã®ã¢ãã¡ãŒã·ã§ã³ãšããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãã©ã®ããã«åäžãããããæ éã«èšç»ããŠãã ãããæ å ±ã®æµããèæ ®ããèŠèŠçã«ãŠãŒã¶ãŒãå€åã«å°ãæ¹æ³ãèããŸãããã
- 説æçãªã¯ã©ã¹åã䜿çšããïŒãã©ã³ãžã·ã§ã³ã«ãããèŠçŽ ã®åœ¹å²ãæç¢ºã«ç€ºãã¯ã©ã¹åïŒäŸïŒ'new-item'ã'old-item'ã'header-transition'ïŒãéžæããŠãã ãããããã«ãããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸãã
- ã¢ãã¡ãŒã·ã§ã³ãç°¡æœã«ä¿ã€ïŒãŠãŒã¶ãŒã®æ³šæãããããããã¢ããªã±ãŒã·ã§ã³ãé ããããããå¯èœæ§ã®ãããé床ã«è€éãŸãã¯é·ãããã¢ãã¡ãŒã·ã§ã³ã¯é¿ããŠãã ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã劚ããã®ã§ã¯ãªããåäžããããã¹ã ãŒãºã§ç¹çްãªãã©ã³ãžã·ã§ã³ãç®æããŸãããã人éã®ç®ã¯æ°çŸããªç§ãè¶ ããé å»¶ã«ææãªã®ã§ããã©ã³ãžã·ã§ã³ã¯é«éã«ä¿ã¡ãŸãããã
- 培åºçã«ãã¹ãããïŒç°ãªãããã€ã¹ããã©ãŠã¶ã§ãã©ã³ãžã·ã§ã³ããã¹ãããæ£ããã¬ã³ããªã³ã°ãããã¹ã ãŒãºã«åäœããããšã確èªããŠãã ãããç¹ã«ã¢ãã€ã«ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ã«æ³šæãæããŸãããã
- ã¢ã¯ã»ã·ããªãã£ãèæ
®ããïŒåãã«ææãªãŠãŒã¶ãŒã«é
æ
®ããŠãã ãããã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ãããããã®åŒ·åºŠãæžãããªãã·ã§ã³ãæäŸããŸãããã
prefers-reduced-motionã¡ãã£ã¢ã¯ãšãªã䜿çšããŠããŠãŒã¶ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èšå®ã§åãã®äœæžãèŠæ±ããŠãããã©ãããæ€åºã§ããŸãã - ã«ã¹ã±ãŒãã广çã«äœ¿çšããïŒCSSã«ã¹ã±ãŒããæŽ»çšããŠã¢ãã¡ãŒã·ã§ã³ã管çããŸããå ±éã®ã¢ãã¡ãŒã·ã§ã³ããããã£ãããŒã¹ã¯ã©ã¹ã§å®çŸ©ããç°ãªãView Transitionã®ç¶æ ã«å¿ããŠç¹å®ã®ããããã£ãäžæžãããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
åçãªã¯ã©ã¹å²ãåœãŠ
äžèšã®äŸã§ã¯view-transition-nameãšview-transition-classã«ã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã䜿çšããŠããŸãããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããããJavaScriptã䜿çšããŠåçã«ç®¡çããããšãå€ãã§ããããããã«ãããç¹å®ã®ç¶æ
å€åããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ããŠç°ãªãã¯ã©ã¹ãé©çšã§ããŸãã
äŸïŒ
function updateContent(newContent, transitionType) {
document.startViewTransition(() => {
const mainElement = document.querySelector('main');
mainElement.innerHTML = newContent;
// æ¢åã®ãã©ã³ãžã·ã§ã³ã¯ã©ã¹ãåé€
mainElement.classList.remove('slide-in', 'fade-in');
// é©åãªãã©ã³ãžã·ã§ã³ã¯ã©ã¹ã远å
if (transitionType === 'slide') {
mainElement.classList.add('slide-in');
} else if (transitionType === 'fade') {
mainElement.classList.add('fade-in');
}
});
}
ãã®äŸã¯ãç®çã®ãã©ã³ãžã·ã§ã³ã¿ã€ãã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããããã«ãCSSã¯ã©ã¹ãåçã«è¿œå ããæ¹æ³ã瀺ããŠããŸãã
è€éãªã³ã³ããŒãã³ãã§ã®äœæ¥
è€éãªã³ã³ããŒãã³ããæ±ãå Žåãã³ã³ããŒãã³ãå
ã®ç°ãªãèŠçŽ ã«è€æ°ã®view-transition-nameããã³view-transition-classå€ãå²ãåœãŠãå¿
èŠããããããããŸãããããã«ããããã詳现ã§å¶åŸ¡ããããã©ã³ãžã·ã§ã³ãäœæã§ããŸãã
äŸïŒ
<div style="view-transition-name: component;">
<h2 style="view-transition-name: component-title; view-transition-class: title-transition;">Component Title</h2>
<p style="view-transition-name: component-content; view-transition-class: content-transition;">Component Content</p>
</div>
ãã®äŸã§ã¯ãã³ã³ããŒãã³ãèªäœãšããã®äžã®ã¿ã€ãã«èŠçŽ ããã³ã³ã³ãã³ãèŠçŽ ã®äž¡æ¹ã«view-transition-nameããããŸããããã«ãããã³ã³ããŒãã³ãå
šäœãäžã€ã®ãŠããããšããŠã¢ãã¡ãŒã·ã§ã³ããã€ã€ãã¿ã€ãã«ãšã³ã³ãã³ãã«åå¥ã®ç¹å®ã®ã¢ãã¡ãŒã·ã§ã³ãé©çšããããšãã§ããŸãã
éåææäœã®åŠç
ç¶æ
ã®æŽæ°ã«éåææäœïŒäŸïŒAPIããã®ããŒã¿ååŸïŒãå«ãŸããå Žåãdocument.startViewTransition()ã³ãŒã«ããã¯ãéåææäœã®å®äº*åŸ*ã«å®è¡ãããããã«ããå¿
èŠããããŸããããã¯ãPromiseãasync/awaitã䜿çšããŠå®çŸã§ããŸãã
äŸïŒ
async function updateContentAsync(newContentUrl) {
document.startViewTransition(async () => {
const response = await fetch(newContentUrl);
const newContent = await response.text();
document.querySelector('main').innerHTML = newContent;
});
}
ã¯ãã¹ãã©ãŠã¶äºææ§ãšããªãã£ã«
2024幎åŸåçŸåšãCSS View Transitionã¯ChromeãEdgeãFirefoxãªã©ã®ã¢ãã³ãã©ãŠã¶ã§è¯å¥œãªãµããŒããåŸãŠããŸããããããå€ããã©ãŠã¶ãSafariã§ã¯ãµããŒããæäŸããããã«ããªãã£ã«ãå¿ èŠã«ãªãå ŽåããããŸããæ¬çªç°å¢ã«ãããã€ããåã«ãç°ãªããã©ãŠã¶ã§ãã©ã³ãžã·ã§ã³ããã¹ãããå¿ èŠã§ããã°Open UIã€ãã·ã¢ãããæäŸãããã®ã®ãããªããªãã£ã«ã®äœ¿çšãæ€èšããããšãéèŠã§ãã
CSS View Transitionãæ¬æ Œçã«å®è£ ããåã«ãcaniuse.comã®ãããªãµã€ãã§çŸåšã®ãã©ãŠã¶ãµããŒãã確èªããŠãã ããã
View Transitionã®æªæ¥
CSS View Transitionã¯ãWebã¢ãã¡ãŒã·ã§ã³ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ããã倧ããªåé²ã衚ããŠããŸãã仿§ãé²åãããã©ãŠã¶ã®ãµããŒããæ¡å€§ããã«ã€ããŠããã®æè¡ã®ããã«æŽç·Žãããåµé çãªäœ¿çšæ³ãèŠãããããšãæåŸ ãããŸããæä»£ã®å ãè¡ãããã«ãView Transitions APIã®ä»åŸã®æ©èœãã¢ããããŒãã«æ³šç®ãç¶ããŠãã ããã
çµè«
view-transition-classããããã£ã«ãã£ãŠä¿é²ãããã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã¯ãCSS View Transitionããã¹ã¿ãŒããäžã§éåžžã«éèŠãªåŽé¢ã§ããã¯ã©ã¹ã䜿çšããŠèŠçŽ ã«ç°ãªãã¢ãã¡ãŒã·ã§ã³ã®ã圹å²ããå²ãåœãŠã::view-transition-*ç䌌èŠçŽ ã§ããããã¿ãŒã²ããã«ããæ¹æ³ãçè§£ããããšã§ãWebã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããããèŠäºã§é
åçãªãã©ã³ãžã·ã§ã³ãäœæã§ããŸãããã©ã³ãžã·ã§ã³ãæ
éã«èšç»ãã説æçãªã¯ã©ã¹åã䜿çšããã¢ãã¡ãŒã·ã§ã³ãç°¡æœã«ä¿ã¡ã培åºçã«ãã¹ãããã¢ã¯ã»ã·ããªãã£ãèæ
®ããããšãå¿ããªãã§ãã ããããããã®ååã念é ã«çœ®ãããšã§ãCSS View Transitionã®ããã³ã·ã£ã«ãæå€§éã«åŒãåºããäžçäžã®ãŠãŒã¶ãŒã«çã«çŽ æŽãããWebäœéšãåµé ããããšãã§ããŸãã
CSS View Transitionã®æ³šææ·±ãé©çšãšã¢ãã¡ãŒã·ã§ã³ã¿ã€ãã®é¢é£ä»ãã®ç¢ºããªçè§£ã¯ãWebãµã€ããWebã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ãšå šäœçãªæŽç·ŽåºŠãåçã«åäžãããããšãã§ããŸããããã¯ãããæºè¶³åºŠã®é«ããŠãŒã¶ãŒãšããããããã§ãã·ã§ãã«ãªã³ã³ãã³ãã®æç€ºã«ã€ãªãããŸããç¹å®ã®ããŒãºã«æé©ãªãã©ã³ã¹ãèŠã€ããããã«ãããŸããŸãªã¢ãã¡ãŒã·ã§ã³ã¿ã€ãããã©ã³ãžã·ã§ã³ã®æç¶æéã詊ããŠã¿ãŠãã ãããããããŒã³ãŒãã£ã³ã°ïŒ